package com.frejoys.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.frejoys.common.dto.common.PageDto;
import com.frejoys.common.enums.EStatus;
import com.frejoys.common.util.AppConfigUtil;
import com.frejoys.common.vo.agent.AgentUserInfoVo;
import com.frejoys.common.vo.app.UserLevelVo;
import com.frejoys.dao.entity.User;
import com.frejoys.dao.entity.UserLevelPromotion;
import com.frejoys.dao.mapper.UserLevelPromotionMapper;
import com.frejoys.dao.mapper.UserMapper;
import com.frejoys.service.UserLevelPromotionService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Service
@RequiredArgsConstructor
public class UserLevelPromotionServiceImpl extends ServiceImpl<UserLevelPromotionMapper, UserLevelPromotion> implements UserLevelPromotionService {

    private final UserMapper userMapper;

    @Override
    public UserLevelPromotion getParentInfo(Long childUserId) {
        LambdaQueryWrapper<UserLevelPromotion> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserLevelPromotion::getChildUserId, childUserId);
        return getOnly(wrapper);
    }

//    //达人推广信息一级 层级
//    @Override
//    public List<UserLevelVo> oneUserPromotionInfo(Long userId, PageDto dto) {
//        Page page = new Page<>(dto.getPage(), dto.getSize());
//        page.setSearchCount(false);
//
//        List<UserLevelVo> list = new ArrayList<>();
//
//        LambdaQueryWrapper<UserLevelPromotion> wrapper = new LambdaQueryWrapper();
//        wrapper.eq(UserLevelPromotion::getUserId, userId);
//
//        List<UserLevelPromotion> userLevelPromotions = baseMapper.selectPage(page, wrapper).getRecords();
//        if (!userLevelPromotions.isEmpty()) {
//            List<Long> userIds = userLevelPromotions.stream().map(UserLevelPromotion::getChildUserId).toList();
//
//            //查询用户 头像昵称
//            List<User> users = userMapper.getUserList(userIds, EStatus.on.getValue());
//            if (!users.isEmpty()) {
//                users.forEach(user -> {
//                    UserLevelVo vo = new UserLevelVo();
//                    vo.setNickname(user.getNickname());
//                    vo.setAvatar(AppConfigUtil.getUrlPrefix(user.getAvatar()));
//                    vo.setId(user.getId());
//                    list.add(vo);
//                });
//            }
//        }
//        return list;
//    }
//
//
//    //达人推广信息二级 层级
//    @Override
//    public List<UserLevelVo> twoUserPromotionInfo(Long userId, PageDto dto) {
//        Page page = new Page<>(dto.getPage(), dto.getSize());
//        page.setSearchCount(false);
//
//        List<UserLevelVo> list = new ArrayList<>();
//
//        LambdaQueryWrapper<UserLevelPromotion> wrapper = new LambdaQueryWrapper();
//        wrapper.eq(UserLevelPromotion::getParentUserId, userId);
//
//        List<UserLevelPromotion> userLevelPromotions = baseMapper.selectPage(page, wrapper).getRecords();
//        if (!userLevelPromotions.isEmpty()) {
//            List<Long> userIds = userLevelPromotions.stream().map(UserLevelPromotion::getChildUserId).toList();
//
//            //查询用户 头像昵称
//            List<User> users = userMapper.getUserList(userIds, EStatus.on.getValue());
//
//            if (!users.isEmpty()) {
//                users.forEach(user -> {
//                    UserLevelVo vo = new UserLevelVo();
//                    vo.setNickname(user.getNickname());
//                    vo.setAvatar(AppConfigUtil.getUrlPrefix(user.getAvatar()));
//                    vo.setId(user.getId());
//                    list.add(vo);
//                });
//            }
//        }
//        return list;
//    }

    /**
     * 根据id获取组所在达人信息
     *
     * @param userId
     */
    @Override
    public List<AgentUserInfoVo> getPromotionUser(Long userId) {
        LambdaQueryWrapper<UserLevelPromotion> wrapper = Wrappers.lambdaQuery();
        wrapper.select(UserLevelPromotion::getChildUserId).eq(UserLevelPromotion::getUserId, userId);
        List<UserLevelPromotion> userLevelPromotions = baseMapper.selectList(wrapper);

        //获取推荐用户id
        List<Long> childUserIds = userLevelPromotions.stream().map(UserLevelPromotion::getChildUserId).toList();
        if (CollectionUtil.isNotEmpty(childUserIds)) {
            List<AgentUserInfoVo> agentUserInfoVos = new ArrayList<>();
            LambdaQueryWrapper<User> userWrapper = Wrappers.lambdaQuery();
            userWrapper.select(User::getId, User::getNickname, User::getAvatar, User::getPhone)
                    .eq(User::getStatus, EStatus.on.getValue()).in(User::getId, childUserIds);
            List<User> users = userMapper.selectList(userWrapper);
            for (User u : users) {
                AgentUserInfoVo infoVo = new AgentUserInfoVo();
                BeanUtils.copyProperties(u, infoVo);
                infoVo.setUserId(u.getId());
                agentUserInfoVos.add(infoVo);
            }
            return agentUserInfoVos;
        }

        return Collections.emptyList();
    }
}
